/*
 * Copyright 2013 Hannes Janetzek
 *
 * This file is part of the OpenScienceMap project (http://www.opensciencemap.org).
 *
 * This program is free software: you can redistribute it and/or modify it under the
 * terms of the GNU Lesser General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY
 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package org.oscim.core;

public class Point {
    public double x;
    public double y;

    public Point() {
    }

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public double getX() {
        return x;
    }

    public double getY() {
        return y;
    }

    public double distance(Point other) {
        return Math.sqrt((x - other.x) * (x - other.x) + (y - other.y) + (y - other.y));
    }

    public double distanceSq(Point other) {
        return (x - other.x) * (x - other.x) + (y - other.y) + (y - other.y);
    }

    @Override
    public String toString() {
        return x + " " + y;
    }

    public void setPerpendicular(Point other) {
        x = -other.y;
        y = other.x;
    }

    public void setPerpendicular(Point p1, Point p2) {
        x = p1.x + p2.x;
        y = p1.y + p2.y;

        double a = p2.x * y - p2.y * x;

        if (a < 0.01 && a > -0.01) {
            /* Almost straight */
            x = -p2.y;
            y = p2.x;
        } else {
            x /= a;
            y /= a;
        }
    }
}
